/**
 * 用户API接口
 * 封装所有用户相关操作
 */

const request = require('./request');

/**
 * 微信登录
 * @param {Object} code - 微信登录code
 * @param {Object} userInfo - 微信用户信息
 * @returns {Promise} 登录结果
 */
function wxLogin(code, userInfo) {
  return request.post('/user/wx-login', { code, userInfo });
}

/**
 * 获取用户信息
 * @returns {Promise} 用户信息
 */
function getProfile() {
  return request.get('/user/profile');
}

/**
 * 获取用户配置资料
 * @returns {Promise} 用户配置资料
 */
function getUserProfile() {
  return request.get('/users/profile');
}

/**
 * 获取用户信息（本地模拟实现）
 * @returns {Promise} 用户信息
 */
function getUserInfo() {
  // 模拟接口返回
  return new Promise((resolve) => {
    // 从本地存储获取用户信息
    const userInfo = wx.getStorageSync('userInfo');
    
    // 如果本地有缓存用户信息，直接返回
    if (userInfo) {
      resolve(userInfo);
    } else {
      // 返回默认用户信息
      const defaultUserInfo = {
        userId: 'U' + Date.now().toString().slice(-6),
        nickname: '测试用户',
        avatarUrl: '/images/default-avatar.png',
        gender: 1,
        birthDate: '1990-01-01',
        height: 170,
        weight: 65,
        phone: '188****3238',
        emergencyContact: '138****5678',
        createTime: new Date().getTime(),
        riskLevel: 0
      };
      
      // 保存到本地存储
      wx.setStorageSync('userInfo', defaultUserInfo);
      resolve(defaultUserInfo);
    }
  });
}

/**
 * 获取用户分类信息
 * @returns {Promise} 用户分类信息
 */
function getUserClassifications() {
  // 模拟接口返回
  return new Promise((resolve) => {
    // 从本地存储获取用户分类信息
    const userClassifications = wx.getStorageSync('userClassifications');
    
    // 如果本地有缓存用户分类信息，直接返回
    if (userClassifications) {
      resolve(userClassifications);
    } else {
      // 返回默认用户分类信息
      const defaultClassifications = {
        hasDiabetes: false,      // 是否有糖尿病
        hasHypertension: false,  // 是否有高血压
        isPregnant: false,       // 是否怀孕
        isElderly: false,        // 是否老年人
        isHighRisk: false        // 是否高风险人群
      };
      
      // 保存到本地存储
      wx.setStorageSync('userClassifications', defaultClassifications);
      resolve(defaultClassifications);
    }
  });
}

/**
 * 更新用户分类信息
 * @param {Object} classifications - 用户分类信息
 * @returns {Promise} 更新结果
 */
function updateUserClassifications(classifications) {
  return new Promise((resolve) => {
    // 保存到本地存储
    wx.setStorageSync('userClassifications', classifications);
    
    // 模拟成功返回
    resolve({ success: true, message: '用户分类更新成功' });
  });
}

/**
 * 更新用户信息
 * @param {Object} data - 用户信息
 * @returns {Promise} 更新结果
 */
function updateProfile(data) {
  return request.put('/user/profile', data);
}

/**
 * 更新用户信息（本地模拟实现）
 * @param {Object} userInfo - 用户信息
 * @returns {Promise} 更新结果
 */
function updateUserInfo(userInfo) {
  return new Promise((resolve) => {
    // 获取当前存储的用户信息
    const currentUserInfo = wx.getStorageSync('userInfo') || {};
    
    // 合并更新信息
    const updatedUserInfo = { ...currentUserInfo, ...userInfo };
    
    // 保存到本地存储
    wx.setStorageSync('userInfo', updatedUserInfo);
    
    // 模拟成功返回
    resolve({ success: true, message: '用户信息更新成功' });
  });
}

/**
 * 解密微信手机号
 * @param {Object} data - 加密数据
 * @returns {Promise} 解密结果
 */
function decryptPhone(data) {
  return request.post('/user/decrypt-phone', data);
}

/**
 * 获取用户风险等级
 * @returns {Promise} 风险等级信息
 */
function getRiskLevel() {
  return request.get('/user/risk-level');
}

/**
 * 退出登录
 * @returns {Promise} 退出结果
 */
function logout() {
  return request.post('/user/logout');
}

/**
 * 判断用户是否需要完善资料
 * @param {Object} userInfo - 用户信息
 * @returns {Boolean} 是否需要完善资料
 */
function needCompleteProfile(userInfo) {
  if (!userInfo) return true;
  
  // 检查必要资料是否完善
  return !userInfo.height || 
         !userInfo.weight || 
         !userInfo.birthDate || 
         !userInfo.gender;
}

/**
 * 计算用户BMI指数
 * @param {Number} height - 身高(cm)
 * @param {Number} weight - 体重(kg)
 * @returns {Number} BMI指数
 */
function calculateBMI(height, weight) {
  if (!height || !weight) return 0;
  
  const heightInMeters = height / 100;
  return weight / (heightInMeters * heightInMeters);
}

/**
 * 获取BMI状态描述
 * @param {Number} bmi - BMI指数
 * @returns {Object} BMI状态描述
 */
function getBMIStatus(bmi) {
  if (bmi <= 0) return { status: 'unknown', text: '未知' };
  
  if (bmi < 18.5) {
    return { status: 'underweight', text: '偏瘦' };
  } else if (bmi < 24) {
    return { status: 'normal', text: '正常' };
  } else if (bmi < 28) {
    return { status: 'overweight', text: '超重' };
  } else {
    return { status: 'obese', text: '肥胖' };
  }
}

/**
 * 根据生日计算年龄
 * @param {String} birthDate - 生日(YYYY-MM-DD)
 * @returns {Number} 年龄
 */
function calculateAge(birthDate) {
  if (!birthDate) return 0;
  
  const today = new Date();
  const birth = new Date(birthDate);
  
  let age = today.getFullYear() - birth.getFullYear();
  const monthDiff = today.getMonth() - birth.getMonth();
  
  if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birth.getDate())) {
    age--;
  }
  
  return age;
}

// 导出模块
module.exports = {
  wxLogin,
  getProfile,
  getUserProfile,
  updateProfile,
  decryptPhone,
  getRiskLevel,
  logout,
  needCompleteProfile,
  calculateBMI,
  getBMIStatus,
  calculateAge,
  getUserInfo,
  updateUserInfo,
  getUserClassifications,
  updateUserClassifications
}; 